/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.CategoriaDeLibroDaoLocal;
import mx.its.dsw2.biblioteca.dao.LibroDaoLocal;
import mx.its.dsw2.biblioteca.enumeraciones.EstadoTransaccion;
import mx.its.dsw2.biblioteca.modelo.Categoria;
import mx.its.dsw2.biblioteca.modelo.CategoriaDeLibro;
import mx.its.dsw2.biblioteca.modelo.Libro;
import mx.its.dsw2.biblioteca.modelo.Prestamo;

/**
 *
 * @author 100101
 */
@Stateless
public class LibroBl implements LibroBlLocal {
    @EJB
    private CategoriaBlLocal categoriaBl;
    @EJB
    private CategoriaDeLibroDaoLocal categoriaDeLibroDao;
    @EJB
    private LibroDaoLocal libroDao;
    
    

    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstadoTransaccion register(Libro book,List<Categoria> categories) {
           if(libroDao.findDuplicity(book)){
        return EstadoTransaccion.INCOMPLETO;
        }else{
            libroDao.create(book);
            for(Categoria c:categories){
                CategoriaDeLibro cdl=new CategoriaDeLibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(book);
                categoriaDeLibroDao.create(cdl);
            }
            return EstadoTransaccion.COMPLETO;
        }
    }

    @Override
    public EstadoTransaccion modify(Libro libro, List<Categoria> lista) {
          if(libro.getId()==null || libroDao.find(libro.getId())==null){
        return EstadoTransaccion.INCOMPLETO;
        }else{
           
            libroDao.edit(libro);
            List<CategoriaDeLibro> old=categoriaDeLibroDao.getListByBook(libro);
            for(CategoriaDeLibro c:old){
//                 System.out.println("id libro "+c.getIdLibro()+" lista vieja catttt "+old);
                categoriaDeLibroDao.remove(c);
            }
            
            for(Categoria c:lista){
                CategoriaDeLibro cdl=new CategoriaDeLibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(libro);
                categoriaDeLibroDao.create(cdl);
            }
             
            return EstadoTransaccion.COMPLETO;
        }
    }

    @Override
    public EstadoTransaccion remove(Libro libro) {
          if(libro.getId()==null || libroDao.find(libro.getId())==null){
        return EstadoTransaccion.INCOMPLETO;
        }else{
            libroDao.remove(libro);
            return EstadoTransaccion.COMPLETO;
        }
    }

    @Override
    public List<Libro>getAll() {
        return libroDao.findAll();
    }

    @Override
    public Libro getLibroPorId(int idLibro) {
        return libroDao.find(idLibro);
    }

    @Override
    public Libro findBookForLend(String codigoLibro) {
        return libroDao.findBookForLend(codigoLibro);
    }

//    @Override
//    public List<Libro> getListByLend(Prestamo lend) {
//        List<Libro> list=libroDao.getListByLend(lend);
//        return list;
//    }
    
    
    
}
